package com.dangdi.util;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.*;

public class SocketMessageController {
    private final static Logger logger = LoggerFactory.getLogger(SocketMessageController.class);

    public static String controller(String message) {
        StringBuffer msg = new StringBuffer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd    HHmmss");
        logger.info("================ 接收到SIP2消息================");
        logger.info(message);
        String actionCode = "";
        int AY = Integer.parseInt(message.substring(message.indexOf("AY") + 2, message.indexOf("AY") + 3));
        String AZ = message.substring(message.indexOf("AZ") + 2, message.length());
        String AB = "";
        String AO = "";
        String AA = "";
        String AD = "";
        String CN = "";
        String CO = "";
        String CP = "";
        String AC = "";
        String AP = "";
        String book_name = "";
        String reader_name = "";
        String reader_card = "";
        SimpleDateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat dfDate2 = new SimpleDateFormat("yyyyMMdd");
        if (message.length() > 2) {
            actionCode = message.substring(0, 2);
            logger.info("消息头=" + actionCode);
        } else {
            logger.info("消息格式错误");
            return "";
        }

        switch (actionCode) {
            case "93":
                //CN为自助设备的帐号
                CN = message.substring(message.indexOf("CN") + 2, message.indexOf("|", message.indexOf("CN")));
                //CO为自助设备的密码
                CO = message.substring(message.indexOf("CO") + 2, message.indexOf("|", message.indexOf("CO")));
                //CP为自助设备的位置
                CP = message.substring(message.indexOf("CP") + 2, message.indexOf("|", message.indexOf("CP")));
                msg.append("94");
                //调用service进行登录
                if (CN == "sip2dqdxx" || CO == "dangdi#123") {
                    msg.append("1");
                    logger.info("自助设备: " + CN + " 登录成功，位置:" + CP);
                } else {
                    msg.append("0");
                    msg.append("|");
                    logger.info("自助设备: " + CN + " 登录失败，位置:" + CP);
                }
                break;
            case "09":
                //当前位置
                AP = message.substring(message.indexOf("AP") + 2, message.indexOf("|", message.indexOf("AP")));
                //物品识别
                AB = message.substring(message.indexOf("AB") + 2, message.indexOf("|", message.indexOf("AB")));
                //终端密码
                AC = message.substring(message.indexOf("AC") + 2, message.indexOf("|", message.indexOf("AC")));
                //机构ID
                AO = message.substring(message.indexOf("AO") + 2, message.indexOf("|", message.indexOf("AO")));
                msg.append("10");
                //如果还书成功  1  否则 0
                msg.append("1");
                //是否脱敏
                msg.append("Y");
                //磁介质
                msg.append("N");
                //蜂鸣
                msg.append("N");
                //交易日期
                msg.append(df.format(new Date()));
                msg.append("AO");
                msg.append("DangDiLibrarSystem");
                msg.append("|");
                msg.append("AB");
                msg.append(AB);
                msg.append("|");
                msg.append("AQ");
                msg.append(AO);
                msg.append("|");
                msg.append("AJ");
                //从数据库查书名
                book_name = "testBook";
                msg.append(book_name);
                msg.append("|");
                msg.append("CL");
                //书的分类
                msg.append("默认分类");
                msg.append("|");
                msg.append("AA");
                //读者卡号  从数据库查
                reader_card = "00000000";
                msg.append(reader_card);
                msg.append("|");
                msg.append("AF");
                //屏幕打印的消息
                msg.append("测试屏幕打印");
                msg.append("|");
                //屏幕打印的消息
                msg.append("AG");
                msg.append("测试屏幕打印1");
                msg.append("|");
                break;
            case "11":
                msg.append("18");
                //机构ID
                AO = message.substring(message.indexOf("AO") + 2, message.indexOf("|", message.indexOf("AO")));
                //用户识别
                AA = message.substring(message.indexOf("AA") + 2, message.indexOf("|", message.indexOf("AA")));
                //用户密码
//              AD=message.substring(message.indexOf("AD")+2,message.indexOf("|",message.indexOf("AD")));
                //物品标识
                AB = message.substring(message.indexOf("AB") + 2, message.indexOf("|", message.indexOf("AB")));
                //终端密码
                AC = message.substring(message.indexOf("AC") + 2, message.indexOf("|", message.indexOf("AC")));
                //通过操作数据库进行借书，如果借书成功 1 否则 0
                msg.append("1");
                //更新策略
                msg.append("Y");
                //是否磁介质物品
                msg.append("N");
                //是否脱敏
                msg.append("Y");
                //交易日期
                msg.append(df.format(new Date()));
                msg.append("AO");
                msg.append(AO);
                msg.append("|");
                msg.append("AA");
                //用户识别
                msg.append(AA);
                msg.append("|");
                msg.append("AB");
                //物品识别
                msg.append(AB);
                msg.append("|");
                msg.append("AJ");
                //从数据库查将要借的书名
                book_name = "testBook";
                msg.append(book_name);
                msg.append("|");
                //持有日期
                msg.append("AH");
                msg.append(dfDate.format(new Date()));
                msg.append("|");
                msg.append("AF");
                //屏幕打印的消息
                msg.append("测试屏幕打印");
                msg.append("|");
                //屏幕打印的消息
                msg.append("AG");
                msg.append("测试屏幕打印1");
                msg.append("|");
                break;
            case "99":
//                AO=message.substring(message.indexOf("AO")+2,message.indexOf("|",message.indexOf("AO")));
                msg.append("98");
                msg.append("Y");
                msg.append("Y");
                msg.append("Y");
                msg.append("Y");
                msg.append("Y");
                msg.append("Y");
                msg.append("010");
                msg.append("003");
                msg.append(df.format(new Date()));
                msg.append("2.00");
                msg.append("AO");
                msg.append("DangDLibrarSystem");
                msg.append("|");
                msg.append("AM");
                msg.append("DangDiLibrarySystem");
                msg.append("|");
                msg.append("BX");
                msg.append("YYYYYYYYYYYYYYYY");
                msg.append("|");
                msg.append("AN");
                msg.append("学校");
                msg.append("|");
                msg.append("AF");
                msg.append("SIP2服务器连接成功！");
                msg.append("|");
                break;
            case "63":

                AO = message.substring(message.indexOf("AO") + 2, message.indexOf("|", message.indexOf("AO")));
                //CN为用户识别
                AA = message.substring(message.indexOf("AA") + 2, message.indexOf("|", message.indexOf("AA")));
                //AN为用户密码
                AD = message.substring(message.indexOf("AD") + 2, message.indexOf("|", message.indexOf("AD")));
                msg.append("64");
                msg.append("              ");
                msg.append("000");
                msg.append(df.format(new Date()));
                msg.append("000000000000000000000000");
                msg.append("AO");
                msg.append(AO);
                msg.append("|");
                msg.append("AA");
                msg.append(AA);
                msg.append("|");
                //从数据库查读者的姓名
                // reader_name="测试用户";
                msg.append("AE");
                msg.append(reader_name);
                msg.append("|");
                msg.append("BZ");
                //正在借阅的书
                List<Map<String, Object>> borrow_book_list = new ArrayList<Map<String, Object>>();
                int borrow_book_cout = 10;
                msg.append(borrow_book_cout - borrow_book_list.size());
                msg.append("|");
                msg.append("CB");
                msg.append(borrow_book_cout);
                msg.append("|");
                msg.append("BL");
                //如果是有效用户append Y ,否则 N
                msg.append("Y");
                msg.append("|");
                msg.append("CQ");
                //如果是有效的用户密码append Y ,否则 N
                msg.append("Y");
                msg.append("|");
                msg.append("AF");
                msg.append("您在本馆最多可借【" + borrow_book_cout + "】册，还可以再借【" + borrow_book_cout + "】册。|AG您在本馆最多可借【" + borrow_book_cout + "】册，还可以再借【" + borrow_book_cout + "】册。");
                msg.append("|");
                for (int i = 0; i < borrow_book_list.size(); i++) {
                    msg.append("AU");
                    msg.append(borrow_book_list.get(i).get("book_rfid"));
                    msg.append("|");
                }
                break;
            case "17":
                //17为查询书名
                //AO为机构ID
                AO = message.substring(message.indexOf("AO") + 2, message.indexOf("|", message.indexOf("AO")));
                ///AB为物品识别
                AB = message.substring(message.indexOf("AB") + 2, message.indexOf("|", message.indexOf("AB")));
                msg.append("18");
                //流通状态 04为收费品
                msg.append("04");
                //安全标记
                msg.append("00");
                //费用类型
                msg.append("01");
                //交易日期
                msg.append(df.format(new Date()));
                //保持队列
                msg.append("CF");
                msg.append("0");
                msg.append("|");
                //到期日期
                msg.append("AH");
                Date sDate = new Date();
                Calendar c = Calendar.getInstance();
                c.setTime(sDate);
                c.add(Calendar.MONTH, 1);
                sDate = c.getTime();

                msg.append(dfDate.format(sDate));
                msg.append("|");
                msg.append("CM");
                msg.append(df.format(new Date()));
                msg.append("|");
                msg.append("AB");
                msg.append(AB);
                msg.append("|");
                msg.append("AJ");
                //此处书名是通过AB（书的RFID）从数据库查出来的
                book_name = "testBook";
                msg.append(book_name);
                msg.append("|");
                msg.append("CK");
                msg.append("001");
                msg.append("|");
                msg.append("AQ");
                msg.append("学校");
                msg.append("|");
                break;
        }
        msg.append("AY");
        msg.append(AY);
        msg.append("AZ");
        msg.append(AZ);
        return msg.toString() + "\r";
    }
}
